The introduction and difference between class component and function component in React


Posted by Christy on 2021-12-22

本文為在 Lidemy W22 的作業中的簡答題第二題,內容有

  1. 介紹 React 裡所有 hook
  2. class component 所有 lifecycle 的 method
  3. class vs function component
  4. uncontrolled vs controlled component

1. 請列出 React 內建的所有 hook,並大概講解功能是什麼

a. useState: 管理及更新在網頁上會變動的資料,例如遊戲的儲存記錄

b. useEffect: 網頁 render 完以後想做的事,例如載入頁面後就更新資料

c. useContext: 利用 createContext 在父層建立資料,將要傳遞的資料放到 value 中,使用 <Context.Provider> 包起來,即可與子層共享資料。

用這個方法傳遞資料與 Props 的差別是,後者必須每一層都傳 value 才可以拿到想要的數值。

Props 是接力棒,ㄧ定要透過每個跑者才能從第一棒傳到最後一棒;useContext 像是捷運廣播消息,只要一廣播,所有人都可以收到列車延誤的訊息。

d. useReducer: 看起來像是在管理 useState 的管理器,透過把 state 們集中,並使用 switch case 的方式,讓程式碼更有可讀性

參考資料:这一次彻底搞定useReducer-使用篇

e. useCallback: 優化程式碼節省效能,如果 dependencies array 中的值沒有被修改,那 React 就會幫我們記住 object 裡面的值,防止 object 被重新分配記憶體位址。

f. useMemo: 用它把資料包起來,如果有變動才 re-render

g. useRef:新增東西但不需要放到畫面上就會用,例如新增 todo 也新增 id,但 id 不需要放在畫面上

h. useImperativeHandle: 讓父元件可以重新定義子元件中使用 ref 的 component

React 資料流特性是向下傳遞,使用這個方式可以讓子元件傳遞資料給父元件,並讓父元件重新定義

就像是捷運裡每個車廂都有廣播回報系統,民眾可以主動通報有人打翻飲料,捷運公司就會去清理

參考資料:最陌生的hooks: useImperativeHandle

i. useLayoutEffect: 在 render 完,瀏覽器 paint 前會執行,也就是說在畫面出現前更新資料;useEffect 是在畫面出現後才更新資料

j. useDebugValue: 安裝 React Developer Tools 以後,可以幫 hook 加上自定義的標籤來 debug

參考資料:React Hooks系列之useDebugValueHooks API Reference

2. 請列出 class component 的所有 lifecycle 的 method,並大概解釋觸發的時機

根據 官方文件 提供的資料,class component 的 lifecycle 分別有三個階段:Mounting、Updating、Unmounting,以下一一介紹,

Mounting 包含了以下的 lifecycle

Updating 包含了以下的 lifecycle

Unmounting

  • componentWillUnmount(): component unmount 之前(意指把 component 從畫面上去除,不 render 它的時候)觸發

Error Handling 在渲染過程、生命週期或 constructor 有錯誤時會觸發以下 methods

3. 請問 class component 與 function component 的差別是什麼?

class component 所用的方式是「每個生命週期都有對應的 method,要做事時就把東西寫在裡面」

function component 什麼東西都寫在 function 裡面,每次執行都會 render 一次,生命週期的方式改用成 useEffect()

4. uncontrolled 跟 controlled component 差在哪邊?要用的時候通常都是如何使用?

差別在於 controlled 是把資料放到 state 裡面;uncontrolled 沒有

uncontrolled 的方式會用在例如 todo 輸入框,在使用者按下送出之後,才會去抓輸入框裡面的值,在這之前都不需要知道使用者輸入什麼,因為不需要掌控它

controlled 的方式則用在例如信用卡號或者手機號碼,如果使用者輸入的格式不對,就可以發出提醒訊息,不需要等到送出之後再去判斷










Related Posts

Docker Compose 建置 Web service 起步走入門教學

Docker Compose 建置 Web service 起步走入門教學

讀書筆記-React 啟動與運行: 前言

讀書筆記-React 啟動與運行: 前言

Ajax 打到controller,返回 400

Ajax 打到controller,返回 400


Comments